約 6,132,263 件
https://w.atwiki.jp/h264hirasa/pages/20.html
JAVA Advanced Image (JAI) https //jai.dev.java.net/binary-builds.html JAI インストール
https://w.atwiki.jp/funf/pages/8.html
javac java -Xmx150M -Xms150M ヒープ容量の初期値と最大値を変更する。Xmxが最大のほう -client -server サーバー用、クライアント用のVMで起動する。クライアントのほうが起動時間がみじかい。サーバーのほうが処理時間が短いみたい。 -Xcomp すべてコンパイルしながら実行する。リアルタイム処理やサーバーみたいな同じ処理をず~っと動かしてるシステムだとあったほうが有効?(未実験) ガベージコレクションをすると遅くなる
https://w.atwiki.jp/ce00582/pages/5338.html
Java Web Start ホームページ http //www15.atwiki.jp/ce00582/pages/5339.html JNLP http //www15.atwiki.jp/ce00582/pages/5340.html
https://w.atwiki.jp/suffix/pages/144.html
Javaの入力のクラス間の関係をグラフ化すると次のような感じになる。 詳細はJava入力(続き)で。
https://w.atwiki.jp/sevenlives/pages/315.html
コンストラクタ(Java) 読み:こんすとらくた 英語:constructor 意味: コンストラクタとはクラス?をインスタンス化したときに実行される特殊な関数のこと。 インスタンス化に伴うフィールド?の初期設定などに使われる。 Javaの場合にはクラス名と同じ名前の戻り値のない関数でコンストラクタを定義する。 コンストラクタの戻り値はそのクラスのインスタンス自身なので戻り値を書く必要がありません。 一つのクラスにシグネチャ?が違うコンストラクタをいくつも定義できインスタンス生成時の引数の種類、数よって様々な動作を行えます【オーバーロード】。 明示的に書かなくてもインスタンス化には何もしないコンストラクタ(デフォルトコンストラクタ?)が実行されている。 コンストラクタは継承されません。 例: public class examConstruct() { public examConstruct() { /*この中にインスタンスの初期設定などを書き入れる*/ } } 2010年11月01日 Java クラス? インスタンス デフォルト・コンストラクタ オーバーロード 継承?
https://w.atwiki.jp/bg1wiki/pages/97.html
ソースコード HelloJavaプロジェクト
https://w.atwiki.jp/ce00582/pages/3786.html
import javax.sound.sampled.*; public class game0714 { public static void main(String[] args) throws LineUnavailableException { int rate = 44100; AudioFormat audio_format = new AudioFormat(rate, 8, 1, true, true); DataLine.Info info = new DataLine.Info( SourceDataLine.class, audio_format); SourceDataLine line = (SourceDataLine)AudioSystem.getLine(info); line.open(); line.start(); byte[] b = new byte[rate]; int i,t; t=0; for (i= 0;i rate; i++) { if(t 100)b[i]=100; if(t 99)b[i]=-100; t=t+1; if(t 200)t=0; } line.write(b,0,rate); line.drain(); // 終了まで待機 } }
https://w.atwiki.jp/memojava/pages/12.html
目次 目次 インストール 環境 Struts1.3.8 iBATIS + ABATOR Spring2 + Spring IDE プロジェクト準備 jarファイルの準備 フォルダ構成 使用テーブル 手順 ABATORによるDAO自動生成 beanのカスタマイズとテーブル内部結合用のsql作成 IDEで定義ファイル作成 画面と各種定義ファイルの作成。 ログイン処理インターフェイスとログイン処理実装クラスの作成 Actionクラスを作成 参考URL インストール 環境 Java 5.0 Tomcat 6.0 Oracle10g XE Eclipse 3.4(日本語化済) Struts1.3.8 http //struts.apache.org/download.cgiからStruts 1.3.8をダウンロード。 解凍して、webapps配下のstruts-blank-1.3.8.warを$CATALINA_HOME\webapps配下に設置。 Tomcatを起動し、ブラウザでhttp //localhost 8081/struts-blank-1.3.8/を開く。 成功すると、$CATALINA_HOME\webapps配下にstruts-blank-1.3.8フォルダが出現。 これを元にEclipseでTomcatプロジェクトを作成する。 iBATIS + ABATOR http //ibatis.apache.org/からiBATIS Java 2.3.4をダウンロード。 解凍して、lib配下のibatis-2.3.4.726.jarを上のStrutsで作ったプロジェクトのlib配下にコピー。 Eclipseを起動し、ヘルプ→ソフトウェア更新→更新可能なソフトウェア→サイトの追加。 ロケーションにhttp //ibatis.apache.org/tools/abator/を入力。 Abator Code Generator for iBATISを選択しインストール。 Spring2 + Spring IDE http //sourceforge.net/project/showfiles.php?group_id=73357からspringframework-2をダウンロード。 解凍して、dist配下のspring.jarを上のStrutsで作ったプロジェクトのlib配下にコピー。 Eclipseを起動し、ヘルプ→ソフトウェア更新→更新可能なソフトウェア→サイトの追加。 ロケーションにhttp //dist.springframework.org/release/IDEを入力。 Spring IDE Update Siteを選択しインストール。 この際GEF(Graphical Editing Framework)とWTS(Web Standard Tools)が一緒にインストールされるはず。 Eclipse3.3以下だと先にGEFとWTSをインストールする必要がある。面倒くさい。 プロジェクト準備 jarファイルの準備 struts-blank-1.3.8を元に作成したプロジェクトに、以下のjarファイルを用意。 struts-blankに最初から入ってたjar antlr-2.7.2.jar commons-beanutils-1.7.0.jar commons-chain-1.1.jar commons-digester-1.8.jar commons-logging-1.0.4.jar commons-validator-1.3.1.jar oro-2.0.8.jar struts-core-1.3.8.jar struts-taglib-1.3.8.jar struts-tiles-1.3.8.jar iBATISから ibatis-2.3.4.726.jar Springから(場所がバラバラなのでフォルダ内検索で。) spring.jar spring-webmvc-struts.jar commons-dbcp.jar commons-logging.jar log4j-1.2.15.jar Oracleドライバ(各自用意) ojdbc14.jar 全部使うかは謎。 common-loggingが2個あるのは多分どちらかが不要なのか? フォルダ構成 Exam(プロジェクト名) ├src(ソースフォルダ) │ └example │ ├action │ ├bean │ ├biz │ ├dao │ └sqlMap(iBATIS用) ├pages(JSP置き場) └WEB-INF(各種定義ファイル) 使用テーブル EMP EMPNO(CHAR) EMPNAME(VARCHAR2) DEPTNO(CHAR) DEPT DEPTNO(CHAR) DEPTNAME(VARCHAR2) 従業員番号を入力すると、従業員名と部署名が返ってくる簡単なものを作ってみる。 手順 ABATORによるDAO自動生成 Eclipseのパッケージエクスプローラ上でプロジェクト名を右クリック→新規→その他。 Abator for iBATIS Wisardsの中のAbator for iBATIS Configuration Fileを選択し次へ。 ロケーションを/WEB-INF/配下にして終了すると、abatorConfig.xmlが作成される。???の部分を以下のように書き加える。 ?xml version="1.0" encoding="UTF-8" ? !DOCTYPE abatorConfiguration PUBLIC "-//Apache Software Foundation//DTD Abator for iBATIS Configuration 1.0//EN" "http //ibatis.apache.org/dtd/abator-config_1_0.dtd" abatorConfiguration abatorContext jdbcConnection driverClass="oracle.jdbc.driver.OracleDriver" connectionURL="jdbc oracle thin @localhost 1521 xe" userId="userID" password="pass" classPathEntry location="ojdbc14.jarのフルパス" / /jdbcConnection javaModelGenerator targetPackage="example.bean" targetProject="Exam" / sqlMapGenerator targetPackage="example.sqlMap" targetProject="Exam" / daoGenerator targetPackage="example.dao" targetProject="Exam" type="GENERIC-CI" / table tableName="EMP" columnOverride column="EMPNO" property="empNo" javaType="String" jdbcType="CHAR" / columnOverride column="EMPNAME" property="empName" javaType="String" jdbcType="VARCHAR2" / columnOverride column="DEPTNO" property="deptNo" javaType="String" jdbcType="CHAR" / /table table tableName="DEPT" columnOverride column="DEPTNO" property="deptNo" javaType="String" jdbcType="CHAR" / columnOverride column="DEPTNAME" property="deptName" javaType="String" jdbcType="VARCHAR2" / /table /abatorContext /abatorConfiguration 保存したら、abatorConfig.xmlを右クリック→Generate iBATIS Artifactsを選択。src/example配下にファイルが自動生成される。 example ├bean │ ├Dept.java │ ├DeptExcample.java │ ├Emp.java │ └EmpExample.java ├dao │ ├DeptDAO.java │ ├DeptDAOImpl.java │ ├EmpDAO.java │ └EmpDAOImpl.java └sqlMap ├Dept_SqlMap.xml └Emp_SqlMap.xml beanのカスタマイズとテーブル内部結合用のsql作成 Emp.javaでDEPTNAMEも扱えるようにする。 Emp.javaにprivate String deptNameを作成し、getter/setterを作る。 他にもやり方はあるがこれが一番単純なので。 EMPとDEPTを内部結合した結果を取得できるようにする。 Emp_SqlMap.xmlを開き、resultMapにDEPTNAMEを追加、新規sql文を作成する。 resultMap id="abatorgenerated_EmpResult" class="example.bean.Emp" result column="EMPNO" property="empNo" jdbcType="CHAR" / result column="EMPNAME" property="empName" jdbcType="VARCHAR2" / result column="DEPTNO" property="deptNo" jdbcType="CHAR" / result column="DEPTNAME" property="deptName" jdbcType="VARCHAR2"/ //追加するカラム /resultMap sql id="abatorgenerated_Example_Where_Clause" : /sql select id="getEmp" resultClass="example.bean.Emp" //新しく追加するsql文 SELECT EMP.EMPNO, EMP.EMPNAME, DEPT.DEPTNAME AS DEPTNAME FROM EMP, DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO AND EMP.EMPNO = #VALUES# //#VALUES#は後で引数を受け取る部分 /select : sqlMapConfig.xml(sqlMap定義ファイル)をsrc/example/sqlMap配下に作成 ?xml version="1.0" encoding="UTF-8" ? !DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" "http //ibatis.apache.org/dtd/sql-map-config-2.dtd" sqlMapConfig settings useStatementNamespaces="true" / transactionManager type="JDBC" dataSource type="SIMPLE" property name="JDBC.Driver" value="oracle.jdbc.driver.OracleDriver" / property name="JDBC.ConnectionURL" value="jdbc oracle thin @localhost 1521 xe" / property name="JDBC.Username" value="userID" / property name="JDBC.Password" value="pass" / /dataSource /transactionManager sqlMap resource="example/sqlMap/EMP_SqlMap.xml" / sqlMap resource="example/sqlMap/DEPT_SqlMap.xml" / /sqlMapConfig dao.xml(DAO定義ファイル)をsrc/sqlMap配下に作成 ?xml version="1.0" encoding="UTF-8"? !DOCTYPE daoConfig PUBLIC "-//iBATIS.com//DTD DAO Configuration 2.0//EN" "http //www.ibatis.com/dtd/dao-2.dtd" daoConfig context transactionManager type="SQLMAP" property name="SqlMapConfigResource" value="sqlMapConfig.xml" / /transactionManager dao interface="example.dao.EmpDAO" implementation="example.dao.EmpDAOImpl" / dao interface="example.dao.DeptDAO" implementation="example.dao.DeptDAOImpl" / /context /daoConfig AppSqlConfig.java(SqlMapClientを一度だけ作成し取得するためのクラス)をexample/sqlMap配下に作成。 import java.io.Reader; import com.ibatis.common.resources.Resources; import com.ibatis.sqlmap.client.SqlMapClient; import com.ibatis.sqlmap.client.SqlMapClientBuilder; public class AppSqlConfig { private static SqlMapClient sqlMap; static { try { String resource = "jp/co/los/Sample001/sqlMap/sqlMapConfig.xml"; Reader reader = Resources.getResourceAsReader(resource); sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader); } catch (Exception e) { e.printStackTrace(); } } public static SqlMapClient getSqlMapInstance() { return sqlMap; } } IDEで定義ファイル作成 パッケージエクスプローラ上でプロジェクト名を右クリック→Spring Tools→Add Spring Project Natureを選択。 パッケージエクスプローラのプロジェクトのアイコンの文字がJからSに変わる。 パッケージエクスプローラ上でプロジェクト名を右クリック→新規→その他→Spring→Spring Bean Definitionを選択し次へ。 親フォルダをWEB-INFにし、名前(ここではapplicationContextとする)を入力し次へ。 beansのすぐ下のcontextにもチェックを入れて終了。 WEB-INF配下にxmlファイルが作成されるので、以下のように書き加える。 ?xml version="1.0" encoding="UTF-8"? beans xmlns="http //www.springframework.org/schema/beans" xmlns xsi="http //www.w3.org/2001/XMLSchema-instance" xmlns context="http //www.springframework.org/schema/context" xsi schemaLocation="http //www.springframework.org/schema/beans http //www.springframework.org/schema/beans/spring-beans.xsd http //www.springframework.org/schema/context http //www.springframework.org/schema/context/spring-context.xsd" context component-scan base-package="example"/ //書き加える部分。base-packageはsrc配下のexampleを入力。 /beans 画面と各種定義ファイルの作成。 ログイン画面(login.jsp)の作成 %@page pageEncoding="Windows-31J" contentType="text/html; charset=Windows-31J" % %@ taglib uri="http //struts.apache.org/tags-html" prefix="html" % head meta http-equiv="Content-Type" content="text/html; charset=Windows-31J"/ title ログイン画面 /title /head body html form action="/login" div ログインID: input type="text" name="empNo" html submit value="送信"/ /div /html form /body /html ログイン成功時画面(success.jsp)の作成 %@page pageEncoding="Windows-31J" contentType="text/html; charset=Windows-31J" % %@ taglib uri="http //struts.apache.org/tags-bean" prefix="bean" % %@ taglib uri="http //struts.apache.org/tags-html" prefix="html" % html head meta http-equiv="Content-Type" content="text/html; charset=Windows-31J"/ title テスト /title /head body div h1 Hello, bean write name="empNo" scope="session"/ bean write name="empName" scope="session"/ さん ( bean write name="deptName" scope="session"/ ) /h1 //従業員No 従業員名さん(部署名)という風に表示させる。 /div /body /html web.xmlの修正 ?xml version="1.0" encoding="ISO-8859-1"? !DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http //java.sun.com/dtd/web-app_2_3.dtd" web-app display-name Sample Application /display-name session-config session-timeout 30 /session-timeout /session-config servlet servlet-name example /servlet-name servlet-class org.apache.struts.action.ActionServlet /servlet-class init-param param-name spring.autowire /param-name //今回はSpringのAutowire機能を使う。 param-value byName /param-value /init-param load-on-startup 2 /load-on-startup /servlet servlet-mapping servlet-name example /servlet-name url-pattern *.do /url-pattern /servlet-mapping /web-app struts-config.xmlの修正 ?xml version="1.0" encoding="UTF-8" ? !DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http //struts.apache.org/dtds/struts-config_1_3.dtd" struts-config form-beans form-bean name="loginForm" type="org.apache.struts.action.DynaActionForm" form-property name="empNo" type="java.lang.String" / form-property name="empName" type="java.lang.String" / form-property name="deptName" type="java.lang.String" / /form-bean /form-beans action-mappings action path="/home" forward="/pages/login.jsp" / action path="/login" type="example.action.LoginAction" name="loginForm" forward name="success" path="/pages/success.jsp" / forward name="failure" path="/pages/login.jsp" / //ログインに失敗したときはログイン画面に戻る。 /action /action-mappings controller processorClass="org.springframework.web.struts.AutowiringRequestProcessor"/ plug-in className="org.springframework.web.struts.ContextLoaderPlugIn" set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml"/ /plug-in /struts-config ログイン処理インターフェイスとログイン処理実装クラスの作成 LoginService.java(インターフェイス)をsrc/example/biz配下に作成。 package example.biz; import example.bean.Emp; public interface LoginService { public Emp execute(String empNo); } LoginServiceImpl.java(実装クラス)をsrc/example/biz配下に作成。 package example.biz; import org.springframework.stereotype.Service; import example.sqlMap.AppSqlConfig; import com.ibatis.sqlmap.client.SqlMapClient; import example.bean.Emp; @Service("loginService") //アノテーションを利用したBean定義 public class LoginServiceImpl implements LoginService { public Emp execute(String empNo) { SqlMapClient sqlMap = AppSqlConfig.getSqlMapInstance(); Emp emp = new Emp(); try { emp = (Emp)sqlMap.queryForObject("EMP.getEmp",empNo); //(1) } catch (Exception e) { e.printStackTrace(); } return emp; } } (1)…EMP_sqlMap.xmlで設定したSQL文を呼び出す。2つ目の引数は#VALUES#に入る。 Actionクラスを作成 package example.action; import org.apache.struts.action.Action; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.DynaActionForm; import org.springframework.beans.factory.annotation.Autowired; import example.bean.Emp; import example.biz.LoginService; public class LoginAction extends Action { @Autowired //……(1) private LoginService loginService = null; @Override public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse res ) throws Exception { HttpSession session = req.getSession(); DynaActionForm dynaForm = (DynaActionForm)form; String empNo = dynaForm.getString("empNo"); Emp emp = loginService.execute(empNo); // 該当する従業員番号があればログイン成功とする。 if (emp != null) { session.setAttribute("empNo", emp.getEmpNo()); session.setAttribute("empName", emp.getEmpName()); session.setAttribute("deptName", emp.getDeptName()); return mapping.findForward("success"); } return mapping.findForward("failure"); } } (1)byNameでのオートワイヤリングなので,LoginServiceImplで指定している@Serviceの引数とLoginActionクラスの@Autowiredが指定してあるフィールドloginService の名称をあわせることでDIされる。 参考URL http //codezine.jp/article/detail/1289 http //www.thinkit.co.jp/free/article/0606/13/2/ http //www.atmarkit.co.jp/fjava/rensai4/spring2_01/spring2_01_1.html http //itpro.nikkeibp.co.jp/article/COLUMN/20080929/315624/?ST=develop P=1
https://w.atwiki.jp/ochamemo/pages/12.html
オチャメモ TODO 基礎 javascriptの型 未定義オブジェクト 数値かどうかのチェック 空のオブジェクト 配列とハッシュ すべてはハッシュ JavaScriptにおけるメンバの定義 JavaScriptにおけるメンバの削除 for in 可変引数 コンストラクタ プロトタイプとは? プロトタイプの仕組み(プロトタイプチェーン) クラス定義 クラス継承 関数について NullとUndefined 配列 関数 apply()メソッドとcall()メソッド 演算子 等値演算子と同値演算子 thisとprototypeどっちで定義すればよいか? 参考リンク 非常に参考になる 読み物系 TODO javaのアクセス指定子の勉強 js.jarのjnlpの指定方法 js.jarのmavenの指定方法 基礎 javascriptの型 プリミティブ系 number--string--boolean-オブジェクト系--object---Number---String---Boolean---Array---[] null function 未定義オブジェクト 未定義オブジェクトかどうかを判定するには以下の方法がある。 // 以下は全部同義(undefined, !, null) var hoge; if (hoge == undefined) { alert("未定義(undefined)"); } if (!hoge) { alert("未定義(!hoge)"); } if (hoge==null) { alert("未定義(null)"); } 連想配列の未定義のチェック var hoges = new Array(); var hoge = hoges["hoge"]; if (hoge == undefined) { document.write("未定義"); } 数値かどうかのチェック if(!isNaN(value)){ document.write("数字"); } 空のオブジェクト var Object = {}; 配列とハッシュ var hash = { java 0, script 1}; var array = [ java , script ]; すべてはハッシュ var hello = {}; hello.world = function() { return "hello, world!" }; hello.hoge = hoge ; alert(hello.hoge); alert(hello[ hoge ]); alert(hello.world()); alert(hello[ world ]()); JavaScriptにおけるメンバの定義 var obj = new Object(); alert(obj.field); // 未定義。未定義の場合 undefined と評価される。 obj.field = 10; // 代入により field というメンバが定義された。 alert(obj.field); // 10 と評価される。 JavaScriptにおけるメンバの削除 var obj = new Object(); obj.field = 10; alert(obj.field); // 10 と評価される。 delete obj.field; // delete 演算子により fieldプロパティが削除される。 alert(obj.field); // 削除され未定義となったため undefined となる。 for in 連想配列からキーを取得できる var info = new Array(); info["name"] = "hoge"; info["type"] = "cat"; info[0] = "A"; info[1] = "B"; for( key in info ){ alert( key + " " + info[key]); } for in でオブジェクトのプロパティを列挙できる var obj = new Object(); obj.foo = value1 ; obj.bar = value2 for (var key in obj) { alert(key + " " + obj[key]); // keyにハッシュのキーが入る(プロパティ名) } 可変引数 argumentsオブジェクトを使うことにより動的にアクセス可能 function hoge(arg1, arg2) { alert(arg1 == arguments[0]); // true alert(arguments[3]); // 4 } hoge(1, 2, 3, 4); コンストラクタ // コンストラクタとは関数定義のこと。 var Hoge = function(){}; // だからこれもコンストラクタ。 function Hoge(){}; // で、これをnewしたらHogeオブジェクトのできあがり var hoge = new Hoge(); // フィールドを定義したい場合は以下のようにthisをつけて代入すればよい var Hoge = function(){ this.field1 = 0; this.field2 = hoge ; }; プロトタイプとは? プロトタイプとはjavaでいうインスタンス。-プロトタイプベースオブジェクト指向とはつまりインスタンスベースクラス指向のこと。-javaのようにクラスの雛形をもとに静的にクラスを生成するのではなく、インスタンスをベースにクラスを量産するというイメージ。**プロトタイプの仕組み(プロトタイプチェーン) コンストラクトした時点では、prototypeは通常、ただの空オブジェクト。 まずオブジェクト自身のプロパティから、該当のプロパティ名を探索 なかった場合、オブジェクトのprototypeオブジェクトのプロパティの中から該当する名前のプロパティを探す。 それでもなければ、そのプロトタイプオブジェクトのprototypeから探索する。 最終的になにもプロパティを持たないprototypeになるまでこれを繰り返す。 見つからなければ、そこで代入になる。参照だったらundefinedのエラーになる これがプロトタイプチェーン。 クラス定義 this,prototypeに定義したメンバは、newしないと参照できない。 定義した変数に直接メンバを設定するとクラス変数、クラスメソッドとなる。 var Hoge = function() { this.thisField = 10; this.thisMethod = function() { return hoge ; }; }; Hoge.prototype.protoMethod = function() { return hogehoge ; }; Hoge.prototype.protoField = 20; Hoge.FIELD = 30; // クラス変数 Hoge.METHOD = function() { return hogehogehoge ; }; // クラスメソッド var hoge = new Hoge(); // prototypeとthisはnewしないと参照できない alert( hoge.thisMethod() +hoge.thisMethod()); // = hoge alert( hoge.protoMethod() +hoge.protoMethod()); // = hogehoge //alert( hoge.METHOD() +hoge.METHOD()); // = エラー not a function alert( hoge.thisField +hoge.thisField); // = 10 alert( hoge.protoField +hoge.protoField); // = 20 //alert( Hoge.thisMethod() +Hoge.thisMethod()); // = エラー not a function //alert( Hoge.protoMethod() +Hoge.protoMethod()); // = 同上 alert( Hoge.FIELD +Hoge.FIELD); // = 30 alert( Hoge.METHOD() +Hoge.METHOD()); // = hogehogehoge クラス継承 prototypeにスーパクラスのインスタンスを設定すればよい。 // スーパクラス var Hoge = function() { this.thisField = 10; this.thisMethod = function() { return hoge ; }; }; Hoge.prototype.protoMethod = function() { return hoge ; }; Hoge.prototype.protoField = 10; Hoge.FIELD = 10; // クラス変数 Hoge.METHOD = function() { return hoge ; }; // クラスメソッド // 継承クラス var Fuga = function() {}; // これでFugaのプロトタイプがHogeになる。つまり継承したことになる Fuga.prototype = new Hoge(); var fuga = new Fuga(); alert( fuga.thisMethod() +fuga.thisMethod()); // = hoge alert( fuga.thisField +fuga.thisField); // = 10 alert( fuga.protoMethod() +fuga.protoMethod()); // = hoge alert( fuga.protoField +fuga.protoField); // = 10 // クラス変数へはアクセスできない alert( Fuga.FIELD +Fuga.FIELD); // = undefined fuga.thisField = 20; alert( fuga.thisField +fuga.thisField); // = 20 書き換わる fuga.protoField = 20; alert( fuga.protoField +fuga.protoField); // = 20 書き換わる fuga.thisMethod = function() { return fuga ; }; alert( fuga.thisMethod() +fuga.thisMethod()); // = fuga 書き換わる fuga.protoMethod = function() { return fuga ; }; alert( fuga.protoMethod() +fuga.protoMethod()); // = fuga 書き換わる // コンストラクタで上書きしたらどうなるか? // てかこれが本来の継承 var Piyo = function() { this.thisField = 20; this.thisMethod = function() { return piyo ; }; }; Piyo.prototype = new Hoge(); var piyo = new Piyo(); alert( piyo.thisMethod() +piyo.thisMethod()); // = piyo 書き換わる alert( piyo.thisField +piyo.thisField); // = 20 書き換わる 関数について 関数内のthisはグローバルオブジェクトのプロパティを示す。 function add(x, y) { this.result = x + y; // これはグローバルのresultを示す。 } add(2, 5); alert(result); NullとUndefined 未定義変数 alert(sValue); // sValueが前もって宣言されていないため、エラーとなる → sValue is not defined null変数 var sValue; alert(sValue); // エラーは起こらないが、undefinedと表示される 配列 配列 var hoge = []; // var hoge = new Array(); とも記述できる。 var hoge2 = [1,2,3,4]; var hoge3 = [1.1, true, "a"]; // ひとつの配列にどんな型も入れられる。 push, pop var hoges = new Array(); hoges.push(0); // 配列の最後に追加 hoges.push(1); hoges.push(2); while (hoges.length != 0) { // 配列の最後を取り出す alert(hoges.pop()); // 2, 1, 0 の順番で表示 } unsift, shift var hoges = new Array(); hoges.unshift(0); // 配列の最初に追加 hoges.unshift(1); hoges.unshift(2); while (hoges.length != 0) { // 配列の最初を取り出す alert(hoges.shift()); // 2, 1, 0 の順番で表示 } 関数 関数宣言はコードの実行より前に解釈される。 c言語で言うstatic変数を関数内にもつ方法 uniqueInteger.counter = 0; // 関数自身にプロパティを設定する。 function uniqueInteger() { return uniqueInteger.counter++; // このプロパティは保持される。 } apply()メソッドとcall()メソッド f.call(o, 1, 2); これは次のように記述したのと同じ o.m = f; o.m(1,2); delete o.m; applyは引数部分を配列で渡す。 f.apply(o, [1,2]); 演算子 基本型をチェックする(typeof) // number, string , boolean , object, function のいずれかを返す var hoge = (typeof value == "string"? "moji" "sonota"; オブジェクトの型をチェックする var d = new Date(); d instanceof Date; // true d inscanceof Object; // true d inscanceof Number; // false 等値演算子と同値演算子 == は型変換してできるだけ等しくなるようにする。 === は型が違えばその時点で、偽になる。 ※== が浅い比較、===が深い比較ではないので注意 オブジェクト同士の比較 ==でも===でも、同じ参照をさしている場合のみ、等しいと判断される。 同じプロパティ、同じ要素を刺して言うことを判定するには個別にチェックしなくてはならない。 nullとundefined ==では、nullもundefindeもnull(false)と判定されるが、===ではより厳密になるため、両者は区別される。 thisとprototypeどっちで定義すればよいか? this--プロパティが上書きできてしまうので好ましくない インスタンスごとにメソッドを定義するのでメモリ効率がよくない prototype--prototyepのプロパティはそれを介したインスタンスで共通に参照される したがってメモリ効率がよい とくにメソッドはprototypeに定義したほうがよい。 var Class = function(){ this.hoge = 0; this.fuga = function() { alert( fuga ); }; }; // var Class = function(){ this.hoge = 0; this.prototype.fuga = function() { alert( fuga ); }; }; 参考リンク 非常に参考になる JavaScriptにおけるオブジェクトの基本的性質-JavaScriptの関数とメソッド-プロトタイプ(prototype)によるJavaScriptのオブジェクト指向 読み物系 javascriptを理解するためのたった2つの大切なこと--http //anond.hatelabo.jp/20070620200618--http //anond.hatelabo.jp/20070622101313-四則演算を JavaScript で実装する--http //d.hatena.ne.jp/nitoyon/20070629/four_operations_implementation_in_javascript-JavaScript 世界で最も誤解されたプログラミング言語--http //d.hatena.ne.jp/brazil/20050829/1125321936-私は如何にしてJavascriptのprototypeを身につけたか。--http //blog.xole.net/article.php?id=560-かつてサーバーサイドJavaScriptは実在した--http //neta.ywcafe.net/000573.html-Rhino on Rails--http //www.aoky.net/articles/steve_yegge/rhino-on-rails.htm
https://w.atwiki.jp/fumimemo/pages/26.html
Jarファイル